﻿#pragma once
#include <utility>
#include <vector>
#include <string>

#include "result.hpp"

struct NetworkInterfaceInfo
{
    std::string name;          // 网卡名称
    std::string description;    // 网卡描述
    std::string macAddress;    // MAC 地址
    std::vector<std::pair<std::string, std::string>> Addresses; // IP 地址列表/子网掩码列表
    uint32_t mtu;                   // 最大传输单元
    bool isUp;                 // 网卡是否启用
};

class NetworkInterface
{
public:
    static std::vector<NetworkInterfaceInfo> getAllInterfaces();
    static std::vector<NetworkInterfaceInfo> getActiveInterfaces();
    static cpp::Result<> setInterfaceConfig(const std::string& interfaceName, const std::string& ipAddress, const std::string& subnetMask);

private:
    static std::vector<NetworkInterfaceInfo> getInterfaces(bool activeOnly);
};
